package com.skiving.cloud.admin.entity;

import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDateTime;

import java.io.Serial;
import java.util.List;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 菜单管理 实体类。
 *
 * @author skivingcloud
 * @since 2025-03-08
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("菜单管理")
@Table("sys_menu")
public class SysMenu implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    @Id
    @ApiModelProperty("")
    private String id;

    /**
     * 父菜单ID，一级菜单为0
     */
    @ApiModelProperty("父菜单ID，一级菜单为0")
    private String parentId;

    /**
     * 菜单名称
     */
    @ApiModelProperty("菜单名称")
    private String name;

    /**
     * 别名
     */
    @ApiModelProperty("别名")
    private String alias;

    /**
     * 菜单URL
     */
    @ApiModelProperty("菜单URL")
    private String url;

    /**
     * 授权(多个用逗号分隔，如：user:list,user:create)
     */
    @ApiModelProperty("授权(多个用逗号分隔，如：user:list,user:create)")
    private String perms;

    /**
     * 类型   0：目录   1：菜单   2：按钮
     */
    @ApiModelProperty("类型   0：目录   1：菜单   2：按钮")
    private String type;

    /**
     * 菜单图标
     */
    @ApiModelProperty("菜单图标")
    private String icon;

    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Integer orderNum;

    /**
     * 系统资源：0-否（系统外资源，挂接其他系统功能用）、1-是
     */
    @ApiModelProperty("系统资源：0-否（系统外资源，挂接其他系统功能用）、1-是")
    private String sysResource;

    /**
     * 租户
     */
    @ApiModelProperty("租户")
    private String tenantId;

    /**
     * 所属终端：1-PC、2-APP
     */
    @ApiModelProperty("所属终端：1-PC、2-APP")
    private String terminal;

    /**
     * 创建人
     */
    @ApiModelProperty("创建人")
    private String creater;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;

    /**
     * 最后修改人
     */
    @ApiModelProperty("最后修改人")
    private String modUser;

    /**
     * 修改时间
     */
    @ApiModelProperty("修改时间")
    private LocalDateTime modTime;

    /**
     * 重定向
     */
    @ApiModelProperty("重定向")
    private String redirect;

    /**
     * 是否隐藏：0-否、1-是
     */
    @ApiModelProperty("是否隐藏：0-否、1-是")
    private String isHide;

    /**
     * 是否缓存：0-否、1-是
     */
    @ApiModelProperty("是否缓存：0-否、1-是")
    private String isKeepAlive;

    /**
     * 是否固定：0-否、1-是
     */
    @ApiModelProperty("是否固定：0-否、1-是")
    private String isAffix;

    @Column(ignore = true)
    private List<SysMenu> children;
}
